/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Model.DaoEmpregado;
import Model.DaoEmprestimo;
import Model.Empregado;
import Model.Emprestimo;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Date;

/**
 *
 * @author Frade
 */
public class Control {

    DaoEmpregado Empregados = new DaoEmpregado();
    DaoEmprestimo Emprestimos = new DaoEmprestimo();
    private static Control instance;

    public static Control getInstance() {
        if (instance == null) {
            instance = new Control();
        }
        return instance;
    }

    public Object LeXML(String path) throws Exception {
        Object o = new Object();
        try {
            FileInputStream fileIn = new FileInputStream(path);
            ObjectInputStream in = new ObjectInputStream(fileIn);
            XMLDecoder decoder = null;
            try {
                decoder = new XMLDecoder(in);
                Object deSerializedObject = decoder.readObject();
                o = deSerializedObject;

            } finally {
                if (decoder != null) {
                    decoder.close();
                }
                return o;
            }
        } catch (IOException i) {
            throw new Exception("Erro leitura xml " + i.getMessage());
        }
    }

    public void SalvaXML(String path, Object o) throws Exception {
        try {
            FileOutputStream fileOut;
            XMLEncoder encoder = null;
            try {

                fileOut = new FileOutputStream(path);
                encoder = new XMLEncoder(fileOut);
                encoder.writeObject(o);
            } finally {
                if (encoder != null) {
                    encoder.close();
                }
            }
        } catch (IOException i) {
            throw new Exception("Erro Salvando xml " + i.getMessage());
        }
    }

    public boolean cadastraEmpregado(String cpf, String nome, char sexo, String DtNascimento, String DtAdmissao, double Salario) {
        Empregado emp;
        try {
            emp = new Empregado(cpf, nome, sexo, new Date(DtNascimento), new Date(DtAdmissao), Salario, null);
            return Empregados.Put(emp);
        } catch (Exception ex) {
        }
        return false;
    }

    public Empregado BuscaEmpregado(String Cpf) {
        return Empregados.Get(Cpf);
    }

    public void CarregaEmpregados(String path) throws Exception {
        Empregados = (DaoEmpregado) LeXML(path);
    }

    public void SalvaEmpregados(String path) throws Exception {
        SalvaXML(path, Empregados);
    }

    public Emprestimo BuscaEmprestimo(String Cpf) {
        return Emprestimos.Get(Cpf);
    }

    public void CarregaEmprestimo(String path) throws Exception {
        Emprestimos = (DaoEmprestimo) LeXML(path);
    }

    public void SalvaEmprestimo(String path) throws Exception {
        SalvaXML(path, Emprestimos);
    }
    
    public boolean cadastraEmprestimo(String cpf,int prestacoes, double valor) throws Exception
    {
       return Emprestimos.Put(new Emprestimo(Empregados.Get(cpf),valor,prestacoes));
    }
}
